/*
 * Copyright 2000-2020 ALPHA LAB.Inc All Rights Reserved.
 */
package com.alphalab.framework.domain;

import java.util.ArrayList;
import java.util.List;

/**
 * POVO转换器抽象基类.
 * @param <VO> 
 * @param <PO>
 * @author allen 
 * @version 1.0.0 2017年9月23日
 */
public abstract class AbstractValueObjectTransfer<VO extends AbstractValueObject, PO extends BaseEntity> 
	implements IValueObjectTransfer<VO, PO> {
 
	/**
	 * 将PO转成VO.
	 * @param paramPO PO
	 * @return VO
	 */
	@Override
	public abstract VO toVO(PO paramPO);

	/**
	 * 将VO转成PO.
	 * @param paramVO VO
	 * @return PO
	 */
	@Override
	public abstract PO toPO(VO paramVO);
	
	/**
	 * 将PO集合转成VO集合.
	 * @param paramList PO集合
	 * @return List
	 */
	@Override
	public List<VO> toVO(final List<PO> paramList) {
		if (paramList == null) {
			return null;
		}
		final List<VO> result = new ArrayList<VO>();
		for (PO po : paramList) {
			result.add(toVO(po));
		}
		return result;
	} 

	/**
	 * 将VO集合转成PO集合.
	 * @param paramList VO集合
	 * @return List<PO>
	 */
	@Override
	public List<PO> toPO(final List<VO> paramList) {
		if (paramList == null) {
			return null;
		}
		final List<PO> result = new ArrayList<PO>();
		for (VO vo : paramList) {
			result.add(toPO(vo));
		}
		return result;
	} 
	
}
